With the proliferation of mobile technologies, more and more corporations are providing network access to key user data that continues to be moved off of client machines and onto servers. There are significant benefits to making such network data available to mobile users even when they are disconnected from the network. For example, continued access to network data while disconnected from the network allows users to work on files when they travel, when they work at home, or when the network is down. Another benefit to having access to network data while being disconnected from the network is that it reduces the amount of data being transmitted over the network between client and server machines.
Client-side caching is the primary way that mobile users maintain access to network data while being disconnected from the network. Client-side caching allows a mobile user to save a local copy of a file accessed, for example, over a network on a server. After disconnecting from the network, a user is still able to edit the local copy of the file. Upon reconnecting to the network, the copy of the file on the server can be updated.
Various implementations of client-server protocols exist that facilitate client-side caching and enable client applications on a computer to read files, create files, update files, and perform other file system tasks over a network via server programs on a remote computer. The Server Message Block protocol (SMB protocol) is an example of such a protocol that can be used over the Internet on top of the TCP/IP protocol or other network protocols such as Internetwork Packet Exchange and NetBEUI. The typical mode of operation with such protocols is for the client to make requests and the server to send back responses. Thus, such protocols enable a client to invoke certain “file system control” operations with respect to a file system on a remote server.
One of the disadvantages with current methods of client-side caching is the significant latency and response times that can be encountered while transferring data between the client and server. A user wanting to edit a file, for example, first downloads the entire file to the client over the network. The user can then disconnect from the network and edit the file. Upon reconnecting with the server over the network, the entire edited file is uploaded to the server in a synchronization process. Regardless of the size or amount of change made to the original file, the whole edited file must be pushed back over the network to the server. Thus, even the smallest change (e.g., a 1 kilobyte insertion or deletion) made to a 10 megabyte file requires that the entire 10 megabyte file be transferred over the network twice. The latency and response times for such transfers can be particularly problematic for slow links such as telephone lines or satellite links.
Another related disadvantage with current methods of client-side caching is the risk of file corruption during file updates between the client and server. During file synchronization (i.e., a file update from client to server), a network glitch or network failure that occurs part way into the update can leave the file being updated on the server in a corrupted state, which may or may not be automatically recoverable. The longer a file update takes, the more likely it is that a network problem will be encountered during the update, and the higher the risk that the file may be corrupted.
Accordingly, a need exists for a way to improve client-side caching that provides for more efficient and reliable updating of remote files.